//
//  MainViewController.swift
//  weibo
//
//  Created by Qing on 2017/4/30.
//  Copyright © 2017年 成哥哥. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    
    //MARK: - 监听方法
    ///点击撰写按钮
    ///@objc是OC的，在堆栈可以看出，Swift没有单独通知的功能，是使用OC的消息机制。
   ///如果单纯使用fileprivate，循环运行将无法发送消息，导致程序崩溃。
    @objc fileprivate func clikComposeButtom() {
        print("点我了")
    }
    
    
    //MARK: - 视图生命周期函数
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        
        //添加控制器，并不会创建tabBar的按钮。
        //懒加载无处不在的，所有的控件都会延迟创建。
        addChildViewControllers()
        
        //调试：看撰写的Button什么时候出现的调试代码
//        print(tabBar.subviews)
        
        setComposeButton()

    }
    
    override func viewWillAppear(_ animated: Bool) {
        
//        在视图即将出现前，创建tabBar 中的所有控制器对应的按钮。
        super.viewWillAppear(animated)
        
        //把撰写Button弄到最前面。
        tabBar.bringSubview(toFront: composeButton)
        
        //调试：看撰写的Button什么时候出现的调试代码
//        print(tabBar.subviews)
        
    }
    
    
    //MARK: - 懒加载控件"撰写Button",使用便利构造函数
    fileprivate lazy var composeButton: UIButton = UIButton(
        imageName: "tabbar_compose_icon_add",
        backImageName: "tabbar_compose_button")
//    {
//        
//        let button = UIButton()
//        
//        button.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add"), for: .normal)
//        button.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
//        button.setBackgroundImage( #imageLiteral(resourceName: "tabbar_compose_button"), for: .normal)
//        button.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button_highlighted"), for: .highlighted)
//        
//        button.sizeToFit()
//        
//        return button
//    }()
//
}


//MARK: - 界面设置
extension MainViewController {
    
    ///设置攒写按钮
    fileprivate func setComposeButton() {
        //添加按钮
        tabBar.addSubview(composeButton)
        
        //调整按钮，获得tarBar的个数
        let count = childViewControllers.count
        
        //获得一个bar的宽度
        let w = tabBar.bounds.width / CGFloat(count) - 1
        
//        let ww = CGRect(x: 0, y: 0, width: w, height: 100)
        //基于上一个视图，进行缩放位。dx:当前视图距离上一视图 『左右两边的x距离』 dy: dx:当前视图距离上一视图 『上下两边的y距离』
        composeButton.frame = tabBar.bounds.insetBy(dx: 2 * w, dy: 0)
        
//        @available(iOS 2.0, *)
//        public func insetBy(dx: CGFloat, dy: CGFloat) -> CGRect
        
        //监控按钮
        composeButton.addTarget(self, action: "clikComposeButtom", for: .touchUpInside)

    }
    

    /// 添加所有控制器
    fileprivate func addChildViewControllers() {
    
        addChildViewController(vc: HomeTableViewController(), title: "主页", iamgeName: "tabbar_Home")
        addChildViewController(vc: DiscoverTableViewController(), title: "发现", iamgeName: "tabbar_Discover")
        addChildViewController(UIViewController())
        addChildViewController(vc: MessageTableViewController(), title: "消息", iamgeName: "tabbar_Message")
        addChildViewController(vc: ProfileTableViewController(), title: "我", iamgeName: "tabbar_Profile")
        
    }
    
    /// 添加控制器
    ///
    /// - Parameters:
    ///   - vc: vc
    ///   - title: 标题
    ///   - iamgeName: 图像名称
    fileprivate  func addChildViewController(vc: UIViewController, title: String, iamgeName: String) {
        
        //实例化一个控制器
//        let vc = HomeTableViewController()
        
        //控制器标题 -> 标题的设置是：由内至外设置
        vc.title = title
        
        //背景图
        vc.tabBarItem.image = UIImage(named: iamgeName)
//        vc.tabBarItem.title = "我不在"
        
        //添加一个vc到导航控制器
        let nav = UINavigationController(rootViewController: vc)
        
//        addChildViewController：将指定的视图控制器添加为当前视图控制器的子节点。 这个不是指func函数addChildViewController
        addChildViewController(nav)
        
    }
    
}
